interface(介面)的好處:
幫助在代碼庫的不同部分之間編寫更多模塊化和解耦的代碼——它可以幫助減少代碼庫不同部分之間的依賴關係並提供鬆散耦合。
例如,想像一個與數據庫層交互的應用程序。如果應用程序使用接口與數據庫交互,那麼它永遠不會知道後台使用的是哪種數據庫。您可以在後台更改數據庫的類型,例如從 arango db 到 mongo db,而應用層無需任何更改,因為它通過 arango db 和 mongo db 都實現的介面與數據庫層交互。
接口可用於在 golang 中實現polymorphism(多型),例如:
不同的國家有不同的計算稅收的方法。這可以通過介面來表示。
type taxCalculator interface{
calculateTax()
}
現在不同的國家可以有自己的結構並且可以實現calculateTax()方法,使用相同的 calculateTax 方法來計算稅款。
package main
import "fmt"
type taxSystem interface {
calculateTax() int
}
type indianTax struct {
taxPercentage int
income int
}
func (i *indianTax) calculateTax() int {
tax := i.income * i.taxPercentage / 100
return tax
}
type singaporeTax struct {
taxPercentage int
income int
}
func (i *singaporeTax) calculateTax() int {
tax := i.income * i.taxPercentage / 100
return tax
}
func main() {
indianTax := &indianTax{
taxPercentage: 30,
income: 1000,
}
singaporeTax := &singaporeTax{
taxPercentage: 10,
income: 2000,
}
taxSystems := []taxSystem{indianTax, singaporeTax}
totalTax := calculateTotalTax(taxSystems)
fmt.Printf("Total Tax is %d\n", totalTax)
// Total Tax is 500
}
func calculateTotalTax(taxSystems []taxSystem) int {
totalTax := 0
for _, t := range taxSystems {
totalTax += t.calculateTax() // 多型
}
return totalTax
}